/**
 * <p>文件名称：GetWebConfig.java</p>
 * <p>文件描述：</p>
 * <p>版权所有: 版权所有(C)2010</p>
 * <p>公   司:  </p>
 * <p>内容摘要: </p>
 * <p>其他说明: </p>
 * <p>完成日期：2010-12-1</p>
 * <p>修改记录1:</p>
 * <pre>
 *    修改日期：2010-12-1
 *    版 本 号：1.1
 *    修 改 人：wxk
 *    修改内容：
 * </pre>
 * @version 1.0
 * @author  
 */
package com.rd.sys.common.utils;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.configuration.PropertiesConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * <pre>
 * 类的名称: GetWebConfig
 * 描述信息: 
 * 
 * @author  
 * @version 1.0
 * 
 * 完成日期: 2010-12-1
 * </pre>
 */
@SuppressWarnings("rawtypes")
public class GetWebConfig {
    // 保存属性值的列表
    private static Map<String, Object> properties = new HashMap<String, Object>();
    private static Logger logger = LoggerFactory.getLogger(GetWebConfig.class);

    private static final String WEB_CFG_NAME = "rd_web_config.properties";

    /**
     * 将所有配置参数加载到缓存
     */
    static {
        try {
            PropertiesConfiguration config = new PropertiesConfiguration();
            config.setEncoding("UTF-8");
            config.setListDelimiter((char) 0);
            config.load(WEB_CFG_NAME);

            Iterator iterator = config.getKeys();
            while (iterator.hasNext()) {
                String key = (String) iterator.next();
                String value = config.getString(key);
                properties.put(key, value);
            }
        } catch (Exception e) {
            logger.error("Fails to initial the configuration parameters.", e);
        }
    }

    /**
     * 获取配置项的值
     * 
     * @param key
     *            配置项的名称
     * @return 值
     */
    public static String getValue(String key) {
        // 先从缓存读取配置参数，再读取系统参数
        if (properties.containsKey(key)) {
            return (String) properties.get(key);
        } else {
            return null;
        }
    }

    /**
     * 获取配置项的值数组
     * 
     * @param key
     *            配置项的名称
     * @param delimeter
     *            分隔符
     * @return 值
     */
    public static String[] getValues(String key, char delimeter) {
        if (properties.containsKey(key)) {
            return (String[]) properties.get(key);
        } else {
            String[] returnvalue = GetWebConfig.getStrings(key);
            if (returnvalue != null) {
                properties.put(key, returnvalue);
            }
            return returnvalue;
        }
    }

    /**
     * 读取配置文件，获取配置项的值(先读取配置文件，配置内容以英语逗号分隔)
     * 
     * @param cfg
     *            配置项名称
     * @return 值
     */
    public static String[] getStrings(String cfg) {
        try {
            PropertiesConfiguration config = new PropertiesConfiguration();
            config.setEncoding("UTF-8");
            config.load(WEB_CFG_NAME);
            String[] value = config.getStringArray(cfg);
            if (value != null && value.length > 0) {
                return value;
            }
            return null;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 更新门户节点中缓存的系统参数值
     * 
     * @return true, 如果更新缓存参数成功
     */
    public static boolean updateSystemParam() {
        try {
            synchronized (properties) {
                properties.clear();
            }

            PropertiesConfiguration config = new PropertiesConfiguration();
            config.setEncoding("UTF-8");
            config.setListDelimiter((char) 0);
            config.load(WEB_CFG_NAME);

            Iterator iterator = config.getKeys();
            while (iterator.hasNext()) {
                String key = (String) iterator.next();
                String value = config.getString(key);
                properties.put(key, value);
            }

            logger.info("更新门户节点中缓存的系统参数值成功");
            return true;
        } catch (Exception e) {
            logger.debug("更新门户节点中缓存的系统参数值失败：" + e.getMessage());
            return false;
        }
    }

    /**
     * 获取int类型的参数值，异常时使用默认值
     * 
     * @param key
     *            参数名称
     * @param defaultValue
     *            默认值
     * @return 参数值,如果有异常返回默认值
     */
    public static int getInt(String key, int defaultValue) {
        try {
            return Integer.parseInt(getValue(key));
        } catch (Exception e) {
            return defaultValue;
        }
    }
}

/**
 * 文件结束: GetWebConfig.java
 */
